\section{Requirements}
\label{req}
From the above examples and trace analysis, we identify the requirements 
of Adaptive TCP. Requirements such as {\bf high network utilization, 
low latency and scalability} are common in network design. For our special 
motivation of reducing average completion time and ease to deploy, an ideal solution 
should also have the following properties.

{\bf Shorter average completion time:} 
Small flows should complete more quickly, while large flows 
should be not influenced. According to our measurement, most 
time-intensive applications such as web services and distributed 
computations are transferring data under a certain size. 
If we can reduce the completion time of small flows, we 
will significantly improve application performance.

{\bf Flow agnostic:} Operators do not need to know whether a 
flow is small or large. The rate allocation should be adaptive 
to the flow size automatically. One existing approach to distinguish 
small flow from large flow is to judge them by IP, port number 
in some historical records and deploy QoS accordingly. But we 
argue that this is not a reasonable way. With the rapid increase 
of applications, configurations for flows will become a large 
burden for the operator; in addition, it is hard to distinguish 
large flows and small flows in the same application such as FTP.
Other approaches to adaptively allocate bandwidth to flows, 
such as $D^3$~\cite{D3} and D2TCP~\cite{d2tcp}, are not flow agnostic.

{\bf No changes to network devices:} Recently router-based 
flow rate control protocols such as $D^3$\cite{D3} 
are proposed. In these protocols, routers need to perform some 
computations to allocate bandwidth to each flow. With so many 
commodity switches being deployed in data centers already, 
we believe an edge- and software- based solution is more reasonable~\cite{rcp, xcp}.


